"""
找出字符串中第一个不重复的字符，返回其索引，无则返回-1

答案的：
算法复杂度时间复杂度:O(n) n是字符串长度）。两次遍历字符串，第一次统计计数，第二次寻找结果。
空间复杂度：O(1)（因为字符集大小有限，字典存储的键数量最多是字符集的大小，可视为常数）。
"""

def first_unique_char(s):
    """找出字符串中第一个不重复的字符，返回其索引，无则返回-1"""

    #首先创建一个空字典 char_count，用于统计每个字符在字符串中出现的次数。
    char_count = {}
    # 统计字符出现次数
    for char in s:
        #遍历字符串 s 中的每个字符 char，通过 char_count.get(char, 0) 获取该字符当前的计数（若不存在则默认返回 0），然后加 1 并更新到字典中。
        #例如，字符串 s = "leetcode"，遍历后 char_count 会变成 {'l':1, 'e':3, 't':1, 'c':1, 'o':1, 'd':1}。
        char_count[char] = char_count.get(char, 0) + 1
    # 遍历字符串找第一个计数为1的字符
    #使用 enumerate(s) 同时遍历字符串的索引 i 和字符 char。
    #enumerate 是 Python 的内置函数，用于同时获取可迭代对象（如字符串、列表、元组等）的 “索引” 和 “元素值”。
    #enumerate 的核心价值是简化 “索引 + 元素” 的遍历场景，让代码更简洁易读。在需要同时处理 “元素位置” 和 “元素本身” 时，它是 Python 开发者的常用工具。
    for i, char in enumerate(s):
        if char_count[char] == 1:
            #若找到第一个计数为 1 的字符，立即返回其索引 i；若遍历完所有字符都没有符合条件的，返回 -1。
            return i
    return -1

# 测试
if __name__ == "__main__":
    s = "loveleetcode"
    print(first_unique_char(s))  # 输出: 2（'v'的索引）
    s = "aabb"
    print(first_unique_char(s))  # 输出: -1